package cn.tannn.cat.file.api.entity;

import cn.tannn.cat.file.api.preview.PreviewUrl;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;

/**
 * 文件索引，快速查询各个存储器的文件数据
 *
 * @author tnnn
 * @version V1.0
 * @date 2024-03-09 20:22
 */
@Schema(description = "文件索引查询视图" )
@ToString
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class FileIndexVO  {

    /**
     * id
     */
    @Schema(description = "id")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;

    /**
     * 存储器配置id[FileStorage.id]
     * 对真实文件进行操作是需要拿到其存储的配置
     */
    @Schema(description =" 存储器配置id[FileStorage.id]")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long storageId;


    /**
     * 字典值[Dict.value] configId的冗余字段
     */
    @Schema(description ="字典值[Dict.value] configId的冗余字段")
    private String storage;

    /**
     * 原文件名
     */
    @Schema(description ="原文件名")
    private String originalName;

    /**
     * 新文件名
     */
    @Schema(description ="新文件名")
    private String freshName;

    /**
     * 文件路径(存储在设备里的真实路径)
     */
    @Schema(description ="文件路径(存储在设备里的真实路径)")
    private String path;

    /**
     * 子路径[文件除开根路径的子路径]
     * <p>本地文件根路径=uploadDir</p>
     * <p>s3根路径=桶</p>
     */
    @Schema(description ="子路径[文件除开根路径的子路径][1:本地文件根路径=uploadDir,2=s3根路径=桶]")
    private String subPath;

    /**
     * 完整的文件URL
     */
    @Schema(description ="文件URL")
    @PreviewUrl
    private String url;

    /**
     * 文件URL后缀[去除了url中的域名或者ip,那个在一些场合可以由前端自定义]
     */
    @Schema(description ="文件URL后缀[去除了url中的域名或者ip,那个在一些场合可以由前端自定义]")
    private String urlSuffix;


    /**
     * 存储的桶
     */
    @Schema(description ="存储的桶")
    private String bucket;


    /**
     * 文件在桶中的路径[桶加子路径和本身]
     */
    @Schema(description ="文件在桶中的路径[桶加子路径和本身]")
    private String bucketPath;

    /**
     * 文件类型[contentType]
     */
    @Schema(description ="文件类型[contentType]")
    private String type;

    /**
     * 文件大小
     */
    @Schema(description ="文件大小")
    private String size;

    /**
     * 文件大小
     */
    @Schema(description ="文件大小")
    private String sizeUnit;


    /**
     * 表示该字段为创建时间字段，
     */
    @Schema(description = "创建时间")
    private String createTime;

    /**
     * 表示该字段为创建人，
     */
    @Schema(description = "创建者")
    private String createUserName;



}
